//typescript 就是给js语言增加type 掌握ts中有哪些类型 什么时候用写这个类型

//ts具备类型推导功能，自动会根据等号右边的值推导等号左边
//如果在ts中不指定类型 那么ts默认无法推导 结果就是any 可以被任何类型所赋值

//ts中的类型都是在：后边 ：后边跟的都是类型
//ts中的基础类型
1-3
let str:string = 'zf';
let num:number = 100;
let bool:boolean = true;

//在我们js中 当我们调用方法的时候（装箱的概念）
(1).toString();//1.toString();
1..toString();//如果默认调用基础类型上的方法 会有装箱的功能 就会把基础类型变成对象类型


//类可以充当类型 用来描述实例的
//Boolean 描述对象 或者写错了
let b1:boolean = true;
let b3:Boolean = new Boolean(true);//这里


//4 ts中还增加一个类型 元祖 标识长度和类型是固定的数组
//promiseall返回数据
let tuple: [string, number, boolean] = ['zf', 100, true]; //不能通过索引增加数据tuple[3]=1
tuple[1] = 100;
tuple.push({});//元素在通过方法 添加数据时只能添加已经存在的类型 破坏了原有的内容


//5 数组：存放一个类型的集合，联合类型可以设置数组的类型
let arr:(number|string)[] = [1];
arr.push('abc');

let arr2:any=[];//当前是任意值
let arr3: any[] = [];//any[]标识这个变量是一个数组里面放的内容可以是随意的
let arr4:Array<(number|string)> = [1];//泛型

//6枚举类型 做成一组枚举值（状态码 固定的标识）
enum AUTH {
    ADMIN = 1,
    MANAGER = 1<<1,//位运算符
    USER = 1<<2 //向右移动2位
}
//默认枚举的功能是具备反举，最终编译的结果是一个对象，如果没有默认值 会自动给出下标 是递增的
//如果当前枚举的值不是一个数字 后边的结果都需要进行手动标识，如果不是数组不会生成反举
console.log(AUTH.ADMIN);
let manager: AUTH = AUTH.ADMIN

const enum COLOR {//常量枚举 不会编译出额外的代码，在不需要反举情况下，我们通常使用常量枚举
    red,yellow,blue
}
console.log(COLOR.red);
//一个用户 它既有admin权限 用户权限
// let color = {
//     admin:1,//00000001
//     manager:1<<1,
//     user:1<<2
// }

//vue3 里面会做节点标记 动态样式 1：动态文本 2：动态属性
//默认对象没有类型 不能进行表示

//写完的结果默认添加export{} 表示当前是一个模块
export {}